package util

import (
	"fmt"
	"reflect"
	"strings"
	"time"
)

const PrefixLink = "|"

func ConcatenateFields(v interface{}) (string, error) {
	val := reflect.ValueOf(v)
	if val.Kind() != reflect.Struct {
		return "", fmt.Errorf("expected a struct, got %v", val.Kind())
	}

	var sb strings.Builder
	for i := 0; i < val.NumField(); i++ {
		// 获取每个字段的值
		fieldVal := val.Field(i)
		// 确保字段是一个结构体
		if fieldVal.Kind() == reflect.Struct {
			// 获取结构体的ToString方法
			method := fieldVal.MethodByName("SetValue")
			if method.IsValid() {
				// 调用ToString方法并获取返回值
				results := method.Call(nil)
				if len(results) > 0 {
					// 将ToString方法的返回值添加到字符串构建器中
					sb.WriteString(results[0].String())
				}
			}
		}
	}

	return sb.String(), nil
}

// 获取当前时间并格式化成18位的时间字符串

func GetCurrentTimeInFormat() string {
	// 获取当前的日期和时间
	currentDate := time.Now().Format("20060102")
	// 获取当前时间
	currentTime := time.Now().Format("150405")
	// 确保最终字符串长度为18位
	var sb strings.Builder
	sb.WriteString(currentDate)
	sb.WriteString("    ")
	sb.WriteString(currentTime)
	formattedTime := sb.String()
	return formattedTime
}

func SplitStringByFirstPipe(s string) (string, string, error) {
	if pipeIndex := strings.Index(s, "|"); pipeIndex != -1 {
		return s[:pipeIndex], s[pipeIndex+1:], nil
	}
	return s, "", nil

}

func GetFormattedDatesAndTime() (string, string, string, string) {
	// 获取当前日期
	currentDate := time.Now().Format("20060102")
	// 获取30天后的日期
	dateIn30Days := time.Now().AddDate(0, 0, 30).Format("20060102")
	// 获取当前时间
	currentTime := time.Now().Format("15:04:05")
	// 获取当前日期和时间
	currentDateTime := time.Now().Format("2006-01-02     15:04:05")

	return currentDate, dateIn30Days, currentTime, currentDateTime
}
